package dto

import (
	"time"
	models "yuanaiproblem/dao/model"
)

// -------------- 试卷相关请求参数 --------------

// CreatePaperRequest 创建试卷的请求参数
type CreatePaperRequest struct {
	Title       string  `json:"title" binding:"required,min=2,max=100"`       // 试卷标题（2-100字）
	Description string  `json:"description" binding:"required,max=500"`       // 试卷描述（最多500字）
	TotalScore  int32   `json:"total_score" binding:"required,min=1,max=300"` // 总分值（1-300分）
	QuestionIDs []int32 `json:"question_ids" binding:"required,min=1"`        // 关联的题目ID列表（至少1题）
}

// UpdatePaperRequest 更新试卷的请求参数（支持部分字段更新）
type UpdatePaperRequest struct {
	Title       *string `json:"title" binding:"omitempty,min=2,max=100"` // 试卷标题（可选，2-100字）
	Description *string `json:"description" binding:"omitempty,max=500"` // 试卷描述（可选，最多500字）
	TotalScore  *int32  `json:"total_score" binding:"omitempty,gt=0"`    // 总分值（可选，大于0）
}

// AddQuestionToPaperRequest 向试卷添加题目的请求参数
type AddQuestionToPaperRequest struct {
	QuestionID    uint `json:"question_id" binding:"required,gt=0"`        // 待添加的题目ID
	QuestionOrder int  `json:"question_order" binding:"required,gte=0"`    // 题目在试卷中的顺序
	Score         int  `json:"score" binding:"omitempty,gt=0" default:"5"` // 题目分值（默认5分，大于0）
}

// UpdateQuestionOrderRequest 更新试卷内题目顺序的请求参数
type UpdateQuestionOrderRequest struct {
	Questions []QuestionOrderItem `json:"questions" binding:"required,min=1,dive"` // 题目顺序列表（至少1题）
}

// QuestionOrderItem 题目顺序项（用于 UpdateQuestionOrderRequest）
type QuestionOrderItem struct {
	QuestionID    uint `json:"question_id" binding:"required,gt=0"`     // 题目ID
	QuestionOrder int  `json:"question_order" binding:"required,gte=0"` // 题目在试卷中的新顺序
}

// -------------- 试卷相关查询参数 --------------

// PaperPageQuery 通用试卷分页查询参数
type PaperPageQuery struct {
	Page     int `form:"page" json:"page" default:"1"`            // 页码（默认1）
	PageSize int `form:"page_size" json:"page_size" default:"20"` // 每页条数（默认20）
}

// UserPapersQuery 按用户查询试卷的分页参数
type UserPapersQuery struct {
	UserID   int32 `form:"user_id" binding:"required,min=1"`           // 所属用户ID（必传）
	Page     int   `form:"page" binding:"required,min=1" default:"1"`  // 页码（默认1）
	PageSize int   `form:"page_size" binding:"required,min=1,max=100"` // 每页条数（1-100）
}

// -------------- 试卷相关响应结构 --------------

// PaperDetailResponse 试卷详情响应（包含关联题目）
type PaperDetailResponse struct {
	ID          uint                   `json:"id"`          // 试卷ID
	Title       string                 `json:"title"`       // 试卷标题
	Description string                 `json:"description"` // 试卷描述
	TotalScore  int                    `json:"total_score"` // 总分值
	CreatorID   int                    `json:"creator_id"`  // 创建者ID
	CreatedAt   time.Time              `json:"created_at"`  // 创建时间
	UpdatedAt   time.Time              `json:"updated_at"`  // 更新时间
	Questions   []PaperQuestionDetails `json:"questions"`   // 试卷包含的题目列表
}

// PaperQuestionDetails 试卷中关联的题目详情（用于 PaperDetailResponse）
type PaperQuestionDetails struct {
	QuestionID    uint              `json:"question_id"`    // 题目ID
	Title         string            `json:"title"`          // 题目标题
	QuestionType  string            `json:"question_type"`  // 题目类型
	Options       models.JSONString `json:"options"`        // 题目选项（JSON格式）
	Answer        string            `json:"answer"`         // 题目答案
	Explanation   string            `json:"explanation"`    // 题目解析
	QuestionOrder int               `json:"question_order"` // 在试卷中的顺序
	Score         int               `json:"score"`          // 该题分值
}

// PaperQuestionItem 试卷中题目的通用信息结构（简化版）
type PaperQuestionItem struct {
	QuestionID    uint   `json:"question_id"`    // 题目ID
	Title         string `json:"title"`          // 题目标题
	QuestionType  string `json:"question_type"`  // 题目类型
	Options       string `json:"options"`        // 题目选项
	Answer        string `json:"answer"`         // 题目答案
	Explanation   string `json:"explanation"`    // 题目解析
	QuestionOrder int    `json:"question_order"` // 在试卷中的顺序
	Score         int    `json:"score"`          // 题目分值
}
